home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 2 / AACD 2.iso / AACD / Magazine / GraphicsCards / StormMesa / src / alphabuf.s < prev    next >
Text File  |  1999-02-04  |  10KB  |  609 lines

  1.  
  2. ; Storm C Compiler
  3. ; Work2:Mesa3/Mesa-3.0/src/alphabuf.c
  4.     mc68030
  5.     mc68881
  6.     XREF    _gl_error
  7.     XREF    _q_memset
  8.     XREF    _malloc
  9.     XREF    _free
  10.     XREF    _CC
  11.  
  12.     SECTION "_gl_alloc_alpha_buffers:0",CODE
  13.  
  14.  
  15. ;void gl_alloc_alpha_buffers( GLcontext* ctx )
  16.     XDEF    _gl_alloc_alpha_buffers
  17. _gl_alloc_alpha_buffers
  18.     movem.l    d2/a2,-(a7)
  19.     move.l    $C(a7),a2
  20. L69
  21. ;   GLint bytes = ctx->Buffer->Width * ctx->Buffer->Height * sizeo
  22.     move.l    $8FC(a2),a0
  23.     move.l    4(a0),d2
  24.     move.l    $8FC(a2),a0
  25.     muls.l    $8(a0),d2
  26. ;   if (ctx->Visual->FrontAlphaEnabled) 
  27.     move.l    $8F8(a2),a0
  28.     tst.b    $24(a0)
  29.     beq.b    L74
  30. L70
  31. ;      if (ctx->Buffer->FrontAlpha) 
  32.     move.l    $8FC(a2),a0
  33.     tst.l    $18(a0)
  34.     beq.b    L72
  35. L71
  36. ;         free( ctx->Buffer->FrontAlpha );
  37.     move.l    $8FC(a2),a0
  38.     move.l    $18(a0),-(a7)
  39.     jsr    _free
  40.     addq.w    #4,a7
  41. L72
  42. ;      ctx->Buffer->FrontAlpha = (GLubyte *) malloc( bytes );
  43.     move.l    d2,-(a7)
  44.     jsr    _malloc
  45.     addq.w    #4,a7
  46.     move.l    $8FC(a2),a0
  47.     move.l    d0,$18(a0)
  48. ;      if (!ctx->Buffer->FrontAlpha) 
  49.     move.l    $8FC(a2),a0
  50.     tst.l    $18(a0)
  51.     bne.b    L74
  52. L73
  53. ;         gl_error( ctx, GL_OUT_OF_MEMORY, "Couldn't allocat
  54.     move.l    #L67,-(a7)
  55.     pea    $505.w
  56.     move.l    a2,-(a7)
  57.     jsr    _gl_error
  58.     add.w    #$C,a7
  59. L74
  60. ;   if (ctx->Visual->BackAlphaEnabled) 
  61.     move.l    $8F8(a2),a0
  62.     tst.b    $25(a0)
  63.     beq.b    L79
  64. L75
  65. ;      if (ctx->Buffer->BackAlpha) 
  66.     move.l    $8FC(a2),a0
  67.     tst.l    $1C(a0)
  68.     beq.b    L77
  69. L76
  70. ;         free( ctx->Buffer->BackAlpha );
  71.     move.l    $8FC(a2),a0
  72.     move.l    $1C(a0),-(a7)
  73.     jsr    _free
  74.     addq.w    #4,a7
  75. L77
  76. ;      ctx->Buffer->BackAlpha = (GLubyte *) malloc( bytes );
  77.     move.l    d2,-(a7)
  78.     jsr    _malloc
  79.     addq.w    #4,a7
  80.     move.l    $8FC(a2),a0
  81.     move.l    d0,$1C(a0)
  82. ;      if (!ctx->Buffer->BackAlpha) 
  83.     move.l    $8FC(a2),a0
  84.     tst.l    $1C(a0)
  85.     bne.b    L79
  86. L78
  87. ;         gl_error( ctx, GL_OUT_OF_MEMORY, "Couldn't allocat
  88.     move.l    #L68,-(a7)
  89.     pea    $505.w
  90.     move.l    a2,-(a7)
  91.     jsr    _gl_error
  92.     add.w    #$C,a7
  93. L79
  94. ;   if (ctx->Color.DrawBuffer==GL_FRONT) 
  95.     move.l    $21E2(a2),d0
  96.     cmp.l    #$404,d0
  97.     bne.b    L81
  98. L80
  99. ;      ctx->Buffer->Alpha = ctx->Buffer->FrontAlpha;
  100.     move.l    $8FC(a2),a0
  101.     move.l    $18(a0),a1
  102.     move.l    $8FC(a2),a0
  103.     move.l    a1,$20(a0)
  104. L81
  105. ;   if (ctx->Color.DrawBuffer==GL_BACK) 
  106.     move.l    $21E2(a2),d0
  107.     cmp.l    #$405,d0
  108.     bne.b    L83
  109. L82
  110. ;      ctx->Buffer->Alpha = ctx->Buffer->BackAlpha;
  111.     move.l    $8FC(a2),a0
  112.     move.l    $1C(a0),a1
  113.     move.l    $8FC(a2),a0
  114.     move.l    a1,$20(a0)
  115. L83
  116.     movem.l    (a7)+,d2/a2
  117.     rts
  118.  
  119. L68
  120.     dc.b    'Couldn't allocate back alpha buffer',0
  121. L67
  122.     dc.b    'Couldn't allocate front alpha buffer',0
  123.  
  124.     SECTION "_gl_clear_alpha_buffers:0",CODE
  125.  
  126.     rts
  127.  
  128. ;void gl_clear_alpha_buffers( GLcontext* ctx )
  129.     XDEF    _gl_clear_alpha_buffers
  130. _gl_clear_alpha_buffers
  131.     movem.l    d2-d4/a2,-(a7)
  132.     move.l    $14(a7),a2
  133. L84
  134. ;   for (buffer=0;
  135.     moveq    #0,d4
  136.     bra    L108
  137. L85
  138. ;      GLubyte *abuffer = NULL;
  139.     sub.l    a0,a0
  140. ;      if (buffer==0
  141.     tst.l    d4
  142.     bne.b    L91
  143. L86
  144.     move.l    $21E2(a2),d0
  145.     cmp.l    #$404,d0
  146.     beq.b    L88
  147. L87
  148.     move.l    $21E2(a2),d0
  149.     cmp.l    #$408,d0
  150.     bne.b    L91
  151. L88
  152.     move.l    $8F8(a2),a1
  153.     tst.b    $24(a1)
  154.     beq.b    L91
  155. L89
  156.     move.l    $8FC(a2),a1
  157.     tst.l    $18(a1)
  158.     beq.b    L91
  159. L90
  160. ;         abuffer = ctx->Buffer->FrontAlpha;
  161.     move.l    $8FC(a2),a0
  162.     move.l    $18(a0),a0
  163.     bra.b    L97
  164. L91
  165. ;      else if (buffer==1
  166.     cmp.l    #1,d4
  167.     bne.b    L97
  168. L92
  169.     move.l    $21E2(a2),d0
  170.     cmp.l    #$405,d0
  171.     beq.b    L94
  172. L93
  173.     move.l    $21E2(a2),d0
  174.     cmp.l    #$408,d0
  175.     bne.b    L97
  176. L94
  177.     move.l    $8F8(a2),a1
  178.     tst.b    $25(a1)
  179.     beq.b    L97
  180. L95
  181.     move.l    $8FC(a2),a1
  182.     tst.l    $1C(a1)
  183.     beq.b    L97
  184. L96
  185. ;         abuffer = ctx->Buffer->BackAlpha;
  186.     move.l    $8FC(a2),a0
  187.     move.l    $1C(a0),a0
  188. L97
  189. ;      if (abuffer) 
  190.     cmp.w    #0,a0
  191.     beq    L107
  192. L98
  193. ;         GLubyte aclear = (GLint) (ctx->Color.ClearColor[3]
  194.     lea    $21C8(a2),a1
  195.     fmove.s    $C(a1),fp0
  196.     fmul.s    #$.437F0000,fp0
  197.     fmove.l    fp0,d0
  198.     move.b    d0,d2
  199. ;         if (ctx->Scissor.Enabled) 
  200.     move.l    a2,a1
  201.     add.l    #$DE92,a1
  202.     tst.b    (a1)
  203.     beq.b    L106
  204. L99
  205. ;            for (j=0;
  206.     moveq    #0,d3
  207.     bra.b    L104
  208. L100
  209. ;               GLubyte *aptr = ALPHA_ADDR(ctx->Buffer
  210.     move.l    $8FC(a2),a0
  211.     move.l    $20(a0),a1
  212.     move.l    $8FC(a2),a0
  213.     move.l    $2C(a0),d0
  214.     add.l    d3,d0
  215.     move.l    $8FC(a2),a0
  216.     muls.l    4(a0),d0
  217.     add.l    d0,a1
  218.     move.l    $8FC(a2),a0
  219.     move.l    $24(a0),d0
  220.     lea    0(a1,d0.l),a0
  221. ;               for (i=0;
  222.     moveq    #0,d0
  223.     bra.b    L102
  224. L101
  225. ;                  *aptr++ = aclear;
  226.     move.b    d2,(a0)+
  227.     addq.l    #1,d0
  228. L102
  229.     move.l    a2,a1
  230.     add.l    #$DE92,a1
  231.     cmp.l    $A(a1),d0
  232.     blt.b    L101
  233. L103
  234.     addq.l    #1,d3
  235. L104
  236.     move.l    a2,a0
  237.     add.l    #$DE92,a0
  238.     cmp.l    $E(a0),d3
  239.     blt.b    L100
  240. L105
  241.     bra.b    L107
  242. L106
  243. ;er, aclear, ctx->
  244.     move.l    $8FC(a2),a1
  245.     move.l    4(a1),d0
  246.     move.l    $8FC(a2),a1
  247.     muls.l    $8(a1),d0
  248.     move.l    d0,-(a7)
  249.     moveq    #0,d0
  250.     move.b    d2,d0
  251.     move.l    d0,-(a7)
  252.     move.l    a0,-(a7)
  253.     jsr    _q_memset
  254.     add.w    #$C,a7
  255. L107
  256.     addq.l    #1,d4
  257. L108
  258.     cmp.l    #2,d4
  259.     blt    L85
  260. L109
  261.     movem.l    (a7)+,d2-d4/a2
  262.     rts
  263.  
  264.     SECTION "_gl_write_alpha_span:0",CODE
  265.  
  266.  
  267. ;void gl_write_alpha_span( GLcontext* ctx, GLuint n, GLint x, GLint y
  268.     XDEF    _gl_write_alpha_span
  269. _gl_write_alpha_span
  270.     movem.l    d2/d3/a2-a4,-(a7)
  271.     movem.l    $24(a7),d0/a2/a4
  272.     movem.l    $1C(a7),d2/d3
  273.     move.l    $18(a7),a3
  274. L110
  275. ;   GLubyte *aptr = ALPHA_ADDR( x, y );
  276.     move.l    a3,a1
  277.     move.l    $8FC(a1),a0
  278.     move.l    $20(a0),a1
  279.     move.l    $8FC(a3),a0
  280.     muls.l    4(a0),d0
  281.     lea    0(a1,d0.l),a0
  282.     add.l    d3,a0
  283. ;   if (mask) 
  284.     cmp.w    #0,a4
  285.     beq.b    L117
  286. L111
  287. ;      for (i=0;
  288.     moveq    #0,d0
  289.     bra.b    L115
  290. L112
  291. ;         if (mask[i]) 
  292.     tst.b    0(a4,d0.l)
  293.     beq.b    L114
  294. L113
  295. ;            *aptr = rgba[i][ACOMP];
  296.     lea    0(a2,d0.l*4),a1
  297.     move.b    3(a1),(a0)
  298. L114
  299. ;         aptr++;
  300.     addq.w    #1,a0
  301.     addq.l    #1,d0
  302. L115
  303.     cmp.l    d2,d0
  304.     blo.b    L112
  305. L116
  306.     bra.b    L120
  307. L117
  308. ;      for (i=0;
  309.     moveq    #0,d0
  310.     bra.b    L119
  311. L118
  312. ;         *aptr++ = rgba[i][ACOMP];
  313.     lea    0(a2,d0.l*4),a1
  314.     move.b    3(a1),d1
  315.     move.b    d1,(a0)+
  316.     addq.l    #1,d0
  317. L119
  318.     cmp.l    d2,d0
  319.     blo.b    L118
  320. L120
  321.     movem.l    (a7)+,d2/d3/a2-a4
  322.     rts
  323.  
  324.     SECTION "_gl_write_mono_alpha_span:0",CODE
  325.  
  326.  
  327. ;void gl_write_mono_alpha_span( GLcontext* ctx, GLuint n, GLint x, GL
  328.     XDEF    _gl_write_mono_alpha_span
  329. _gl_write_mono_alpha_span
  330.     movem.l    d2-d4/a2/a3,-(a7)
  331.     move.l    $24(a7),d0
  332.     move.l    $1C(a7),d1
  333.     move.b    $28(a7),d2
  334.     move.l    $20(a7),d4
  335.     move.l    $2A(a7),a2
  336.     move.l    $18(a7),a3
  337. L121
  338. ;   GLubyte *aptr = ALPHA_ADDR( x, y );
  339.     move.l    a3,a1
  340.     move.l    $8FC(a1),a0
  341.     move.l    $20(a0),a1
  342.     move.l    $8FC(a3),a0
  343.     muls.l    4(a0),d0
  344.     lea    0(a1,d0.l),a0
  345.     add.l    d4,a0
  346. ;   if (mask) 
  347.     cmp.w    #0,a2
  348.     beq.b    L128
  349. L122
  350. ;      for (i=0;
  351.     moveq    #0,d0
  352.     bra.b    L126
  353. L123
  354. ;         if (mask[i]) 
  355.     tst.b    0(a2,d0.l)
  356.     beq.b    L125
  357. L124
  358. ;            *aptr = alpha;
  359.     move.b    d2,(a0)
  360. L125
  361. ;         aptr++;
  362.     addq.w    #1,a0
  363.     addq.l    #1,d0
  364. L126
  365.     cmp.l    d1,d0
  366.     blo.b    L123
  367. L127
  368.     bra.b    L131
  369. L128
  370. ;      for (i=0;
  371.     moveq    #0,d0
  372.     bra.b    L130
  373. L129
  374. ;         *aptr++ = alpha;
  375.     move.b    d2,(a0)+
  376.     addq.l    #1,d0
  377. L130
  378.     cmp.l    d1,d0
  379.     blo.b    L129
  380. L131
  381.     movem.l    (a7)+,d2-d4/a2/a3
  382.     rts
  383.  
  384.     SECTION "_gl_write_alpha_pixels:0",CODE
  385.  
  386.  
  387. ;void gl_write_alpha_pixels( GLcontext* ctx,
  388.     XDEF    _gl_write_alpha_pixels
  389. _gl_write_alpha_pixels
  390. L143    EQU    -$8
  391.     link    a5,#L143
  392.     movem.l    d2/d3/a2-a4,-(a7)
  393.     move.l    $C(a5),d3
  394.     move.l    $8(a5),a0
  395.     move.l    $18(a5),a4
  396. L132
  397. ;   if (mask) 
  398.     tst.l    $1C(a5)
  399.     beq.b    L139
  400. L133
  401. ;      for (i=0;
  402.     moveq    #0,d0
  403.     bra.b    L137
  404. L134
  405. ;         if (mask[i]) 
  406.     move.l    $1C(a5),a2
  407.     tst.b    0(a2,d0.l)
  408.     beq.b    L136
  409. L135
  410. ;            GLubyte *aptr = ALPHA_ADDR( x[i], y[i] );
  411.     move.l    $8FC(a0),a1
  412.     move.l    $20(a1),a2
  413.     move.l    $14(a5),a3
  414.     move.l    $8FC(a0),a1
  415.     move.l    0(a3,d0.l*4),d1
  416.     muls.l    4(a1),d1
  417.     add.l    d1,a2
  418.     move.l    $10(a5),a3
  419.     move.l    0(a3,d0.l*4),d1
  420.     add.l    d1,a2
  421. ;            *aptr = rgba[i][ACOMP];
  422.     lea    0(a4,d0.l*4),a1
  423.     move.b    3(a1),(a2)
  424. L136
  425.     addq.l    #1,d0
  426. L137
  427.     cmp.l    d3,d0
  428.     blo.b    L134
  429. L138
  430.     bra.b    L142
  431. L139
  432. ;      for (i=0;
  433.     moveq    #0,d0
  434.     bra.b    L141
  435. L140
  436. ;         GLubyte *aptr = ALPHA_ADDR( x[i], y[i] );
  437.     move.l    $8FC(a0),a1
  438.     move.l    $20(a1),a2
  439.     move.l    $14(a5),a3
  440.     move.l    $8FC(a0),a1
  441.     move.l    0(a3,d0.l*4),d1
  442.     muls.l    4(a1),d1
  443.     add.l    d1,a2
  444.     move.l    $10(a5),a3
  445.     move.l    0(a3,d0.l*4),d1
  446.     add.l    d1,a2
  447. ;         *aptr = rgba[i][ACOMP];
  448.     lea    0(a4,d0.l*4),a1
  449.     move.b    3(a1),(a2)
  450.     addq.l    #1,d0
  451. L141
  452.     cmp.l    d3,d0
  453.     blo.b    L140
  454. L142
  455.     movem.l    (a7)+,d2/d3/a2-a4
  456.     unlk    a5
  457.     rts
  458.  
  459.     SECTION "_gl_write_mono_alpha_pixels:0",CODE
  460.  
  461.  
  462. ;void gl_write_mono_alpha_pixels( GLcontext* ctx,
  463.     XDEF    _gl_write_mono_alpha_pixels
  464. _gl_write_mono_alpha_pixels
  465. L155    EQU    -$8
  466.     link    a5,#L155
  467.     movem.l    d2-d4/a2-a4,-(a7)
  468.     movem.l    $C(a5),d3/a4
  469.     move.b    $18(a5),d4
  470.     move.l    $8(a5),a0
  471. L144
  472. ;   if (mask) 
  473.     tst.l    $1A(a5)
  474.     beq.b    L151
  475. L145
  476. ;      for (i=0;
  477.     moveq    #0,d0
  478.     bra.b    L149
  479. L146
  480. ;         if (mask[i]) 
  481.     move.l    $1A(a5),a2
  482.     tst.b    0(a2,d0.l)
  483.     beq.b    L148
  484. L147
  485. ;            GLubyte *aptr = ALPHA_ADDR( x[i], y[i] );
  486.     move.l    $8FC(a0),a1
  487.     move.l    $20(a1),a2
  488.     move.l    $14(a5),a3
  489.     move.l    $8FC(a0),a1
  490.     move.l    0(a3,d0.l*4),d1
  491.     muls.l    4(a1),d1
  492.     add.l    d1,a2
  493.     move.l    0(a4,d0.l*4),d1
  494. ;            *aptr = alpha;
  495.     move.b    d4,0(a2,d1.l)
  496. L148
  497.     addq.l    #1,d0
  498. L149
  499.     cmp.l    d3,d0
  500.     blo.b    L146
  501. L150
  502.     bra.b    L154
  503. L151
  504. ;      for (i=0;
  505.     moveq    #0,d0
  506.     bra.b    L153
  507. L152
  508. ;         GLubyte *aptr = ALPHA_ADDR( x[i], y[i] );
  509.     move.l    $8FC(a0),a1
  510.     move.l    $20(a1),a2
  511.     move.l    $14(a5),a3
  512.     move.l    $8FC(a0),a1
  513.     move.l    0(a3,d0.l*4),d1
  514.     muls.l    4(a1),d1
  515.     add.l    d1,a2
  516.     move.l    0(a4,d0.l*4),d1
  517. ;         *aptr = alpha;
  518.     move.b    d4,0(a2,d1.l)
  519.     addq.l    #1,d0
  520. L153
  521.     cmp.l    d3,d0
  522.     blo.b    L152
  523. L154
  524.     movem.l    (a7)+,d2-d4/a2-a4
  525.     unlk    a5
  526.     rts
  527.  
  528.     SECTION "_gl_read_alpha_span:0",CODE
  529.  
  530.  
  531. ;void gl_read_alpha_span( GLcontext *ctx,
  532.     XDEF    _gl_read_alpha_span
  533. _gl_read_alpha_span
  534.     movem.l    d2/d3/a2/a3,-(a7)
  535.     movem.l    $20(a7),d0/a2
  536.     movem.l    $18(a7),d2/d3
  537.     move.l    $14(a7),a3
  538. L156
  539. ;   GLubyte *aptr = ALPHA_ADDR( x, y );
  540.     move.l    a3,a1
  541.     move.l    $8FC(a1),a0
  542.     move.l    $20(a0),a1
  543.     move.l    $8FC(a3),a0
  544.     muls.l    4(a0),d0
  545.     lea    0(a1,d0.l),a0
  546.     add.l    d3,a0
  547. ;   for (i=0;
  548.     moveq    #0,d0
  549.     bra.b    L158
  550. L157
  551. ;      rgba[i][ACOMP] = *aptr++;
  552.     lea    0(a2,d0.l*4),a1
  553.     move.b    (a0)+,3(a1)
  554.     addq.l    #1,d0
  555. L158
  556.     cmp.l    d2,d0
  557.     blo.b    L157
  558. L159
  559.     movem.l    (a7)+,d2/d3/a2/a3
  560.     rts
  561.  
  562.     SECTION "_gl_read_alpha_pixels:0",CODE
  563.  
  564.  
  565. ;void gl_read_alpha_pixels( GLcontext *ctx,
  566.     XDEF    _gl_read_alpha_pixels
  567. _gl_read_alpha_pixels
  568. L166    EQU    -$8
  569.     link    a5,#L166
  570.     movem.l    d2/d3/a2-a4,-(a7)
  571.     move.l    $C(a5),d3
  572.     move.l    $8(a5),a2
  573.     move.l    $18(a5),a4
  574. L160
  575. ;   for (i=0;
  576.     moveq    #0,d0
  577.     bra.b    L164
  578. L161
  579. ;      if (mask[i]) 
  580.     move.l    $1C(a5),a1
  581.     tst.b    0(a1,d0.l)
  582.     beq.b    L163
  583. L162
  584. ;         GLubyte *aptr = ALPHA_ADDR( x[i], y[i] );
  585.     move.l    $8FC(a2),a0
  586.     move.l    $20(a0),a1
  587.     move.l    $14(a5),a3
  588.     move.l    $8FC(a2),a0
  589.     move.l    0(a3,d0.l*4),d1
  590.     muls.l    4(a0),d1
  591.     add.l    d1,a1
  592.     move.l    $10(a5),a3
  593.     move.l    0(a3,d0.l*4),d1
  594. ;         rgba[i][ACOMP] = *aptr;
  595.     move.b    0(a1,d1.l),d1
  596.     lea    0(a4,d0.l*4),a0
  597.     move.b    d1,3(a0)
  598. L163
  599.     addq.l    #1,d0
  600. L164
  601.     cmp.l    d3,d0
  602.     blo.b    L161
  603. L165
  604.     movem.l    (a7)+,d2/d3/a2-a4
  605.     unlk    a5
  606.     rts
  607.  
  608.     END
  609.